package com.google.code.jtasks.client.modules;

import com.google.code.jtasks.client.ui.ScreenHelper;
import com.google.code.jtasks.client.ui.TaskOutputter;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
import com.google.inject.Singleton;
import com.googlecode.lanterna.TerminalFacade;
import com.googlecode.lanterna.screen.Screen;
import com.googlecode.lanterna.screen.ScreenWriter;
import com.googlecode.lanterna.terminal.Terminal;

/**
 * Модуль, конфигурирующий объекты библиотеки <em>Lanterna</em>, отвечающей за
 * консольный интерфейс, а также вспомогательные классы для вывода данных.
 */
public class LanternaModule extends AbstractModule {
    @Override
    protected void configure() {
        binder().requireExplicitBindings();

        bind(ScreenHelper.class);
        bind(TaskOutputter.class);
    }

    @Provides @Singleton
    Terminal lanternaTerminal() {
        return TerminalFacade.createTerminal();
    }

    @Provides @Singleton
    Screen lanternaScreen(Terminal terminal) {
        return TerminalFacade.createScreen(terminal);
    }

    @Provides
    ScreenWriter screenWriter(Screen screen) {
        return new ScreenWriter(screen);
    }
}
